tests: make GtkMenu test more flexible
authorRyan Lortie <desrt@desrt.ca>
Sun, 5 May 2013 21:18:13 +0000 (17:18 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Mon, 13 May 2013 20:33:42 +0000 (16:33 -0400)
We were using gtk_menu_item_get_label() from a testcase to determine the
label associated with a menu item.  Future changes to GtkModelMenuItem
will cause this to stop working, so try a bit harder to find a label
inside of the item.

gtk/tests/gtkmenu.c

index 35bb434c3c32549ffcc6377dfa40c00d458cfd02..e2667ba135d05f125f8095bca871285892435811 100644 (file)
@@ -216,6 +216,25 @@ random_menu_new (GRand *rand,
 
 static void assert_menu_equality (GtkContainer *container, GMenuModel   *model);
 
+static const gchar *
+get_label (GtkMenuItem *item)
+{
+  GList *children = gtk_container_get_children (GTK_CONTAINER (item));
+  const gchar *label = NULL;
+
+  while (children)
+    {
+      if (GTK_IS_CONTAINER (children->data))
+        children = g_list_concat (children, gtk_container_get_children (children->data));
+      else if (GTK_IS_LABEL (children->data))
+        label = gtk_label_get_text (children->data);
+
+      children = g_list_delete_link (children, children);
+    }
+
+  return label;
+}
+
 /* a bit complicated with the separators...
  *
  * with_separators are if subsections of this GMenuModel should have
@@ -307,7 +326,7 @@ assert_section_equality (GSList      **children,
           our_children = g_slist_remove (our_children, item);
 
           /* get_label() returns "" when it ought to return NULL */
-          g_assert_cmpstr (gtk_menu_item_get_label (item), ==, label ? label : "");
+          g_assert_cmpstr (get_label (item), ==, label ? label : "");
           submenu_widget = gtk_menu_item_get_submenu (item);
 
           if (submenu)